<?php
namespace Admin\Controller;
use Think\Controller;
class ModelController extends CommonController
{
	public function index(){
		$model = M('model');
		$models = $model->select();
		$this->assign('models',$models);
		$this->display();
	}
	//添加模型
	public function add(){
		if (IS_POST) {
			$rules = array(
			     array('name','require','模型名必须填写'), //默认情况下用正则进行验证
			     array('table','require','模型附表必须填写'), // 验证table字段
			     array('name','','模型名称已经存在！',0,'unique',1), //name字段唯一性验证
			     array('table','','模型附表名已经存在！',0,'unique',1), //table字段唯一性验证
			     array('table', '/^[a-z_0-9]+$/i', '模型附表名只支持英文！', 0, 'regex', 3),
			     array('status',array(0,1),'数据错误',0,'in'), // 当值不为空的时候判断是否在一个范围内
			);
			$data = I('post.');
			$model = M("Model"); // 实例化model对象
			if (!$model->validate($rules)->create()){
				// 如果创建失败 表示验证没有通过 输出错误提示信息
			    alertMes($model->getError());
			}else{
				$modelId=$model->add();
				if ($modelId){
					$mods=M();
					$table=$data['table'];
					$sql="DROP TABLE IF EXISTS `xwcms_model_{$data['table']}`;
						  CREATE TABLE `xwcms_model_{$data['table']}` (
							`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
							`modelid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '模型id',
							`catid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '栏目id',
							PRIMARY KEY (`id`)
						  ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='{$data['name']}模型表';";//删除对应模型附表
					$mods->execute($sql);//执行创建对应的模型表

					$mod=D("Model");
					$field=$mod->getFieldList();//获取公有字段
					//模型id替换
        			$sqlSplit = str_replace('@modelid@',$modelId,$field);
        			$mods->execute($sqlSplit);
					$data=$mod->getMainTable();
					//模型id替换
					$sqlSplits = str_replace('@table@',$table,$data);
					$mods->execute($sqlSplits);
					alertMes('添加成功','/admin/model/index');
				} else {
					alertMes('添加失败');
				}
			}
		} else {
			$model = M('model');
			$models = $model->select($sql);
			$this->assign('models',$models);
			$this->display();
		}
	}

	//删除模型
	public function del($id = null){
		if (!empty($id)) {
			$mod = M('model');
			$m=M("category");
			//判断模型下面是否还有栏目
			$list=$m->where("modelid=$id")->select();
			if($list){
				alertMes('该模型下面还有栏目！请先删除栏目', '/admin/model/index');
			}
			$field=M("model_field");
			$table=$mod->where("modelid=$id")->getField("table");
			$res = $mod->where("modelid=$id")->delete();
			$mods=M();
			if ($res) {
				$sql="DROP TABLE IF EXISTS `xwcms_model_$table`;";//删除对应模型附表
				$mods->execute($sql);//执行删除
				$field->where("modelid=$id")->delete();
				alertMes('删除成功', '/admin/model/index');
			} else {
				alertMes('删除失败', '/admin/model/index');
			}
		} else {
			alertMes('模型不存在，无法删除', '/admin/model/index');
		}
	}

	//编辑模型
	public function edit($id = null){
		if (IS_POST) {
			$rules = array(
			     array('name','require','模型名必须填写'), //默认情况下用正则进行验证
			     array('table','require','模型附表必须填写'), // 验证name字段
			     array('status',array(0,1),'数据错误',0,'in'), // 当值不为空的时候判断是否在一个范围内
			);
			$model = M('model');
			if (!$model->validate($rules)->create()){
				// 如果创建失败 表示验证没有通过 输出错误提示信息
				alertMes($model->getError());
			}else{
				// 验证通过 可以进行其他数据操作
				$data['name']=$_POST['name'];
				$data['table']=$_POST['table'];
				$data['description']=$_POST['description'];
				$data['status']=$_POST['status'];
				$data['template']=$_POST['template'];
				$tablename=$_POST['tablename'];
				$id=$_POST['id'];
				//修改表名
				$mods=M();
				$sql="ALTER  TABLE xwcms_model_$tablename RENAME TO xwcms_model_{$data['table']}";
				$mods->execute($sql);
				$res = $model->where("modelid=$id")->save($data);
				if ($res !== false ) {
					alertMes('编辑成功','/admin/model/index');
				} else {
					alertMes('编辑失败');
				}
			}
		} else {
			if (!empty($id)) {
				$model = M('model');
				$data = $model->where("modelid=$id")->find();
				$this->assign('data',$data);
			} else {
				alertMes('请选择编辑模型','/admin/model/index');
			}
			$this->display();
		}
	}

	//模型导出
    public function export($modelid) {
        //需要导出的模型ID
        if (empty($modelid)) {
            alertMes('请指定需要导出的模型！');
        }
        //导出模型
        $status = D("Model")->export($modelid);
        // dump($status);exit;
        if ($status) {
            header("Content-type: application/octet-stream");
            header("Content-Disposition: attachment; filename=spf_model_" . $modelid . '.txt');
            echo $status;
        } else {
            alertMes(D("Model")->getError() ? D("Model")->getError() : '模型导出失败！');
        }
    }

    //模型导入
    public function import() {
        if (empty($_FILES['file'])) {
            alertMes("请选择上传文件！");
        }
        $filename = $_FILES['file']['tmp_name'];
        if (strtolower(substr($_FILES['file']['name'], -3, 3)) != 'txt') {
            alertMes("上传的文件格式有误！只允许.txt文件");
        }
        //读取文件
        $data = file_get_contents($filename);
        //删除
        @unlink($filename);
        //模型名称
        $name = I('post.name', NULL, 'trim');
        //模型表键名
        $table = I('post.table', NULL, 'trim');
        //导入
        $status = D("Model")->import($data, $table, $name);
        if ($status) {
            alertMes("模型导入成功",'/admin/model/index');
        } else {
            alertMes("模型导入失败！");
        }
    }
}